#ifndef __M_LOGGER_H__
#define __M_LOGGER_H__

#include <stdio.h>
#include <time.h>

#define INF 0
#define DBG 1
#define ERR 2
#define DEFAULT_LOG_LEVEL INF

// define只能写在一行 多行时使用\进行转义
// struct tm结构体中有年月日时分秒等数据
// strftime将获取到的相关时间数据转为特定格式的字符串
// ##__VA_ARGS__ 动态处理可变参数 处理没有参数的情况
// __FILE__, __LINE__, 分别为文件名和行号
#define LOG(level,format,...) do{\
    if (DEFAULT_LOG_LEVEL > level) break;\
    time_t t = time(NULL);\
    struct tm *lt = localtime(&t);\
    char buf[32] = {0};\
    strftime(buf,31,"%H:%M:%S",lt);\
    fprintf(stdout,"[%s %s:%d] " format "\n" , buf, __FILE__, __LINE__, ##__VA_ARGS__);\
}while(0)

// 进一步的封装
#define ILOG(format,...) LOG(INF,format,##__VA_ARGS__)
#define DLOG(format,...) LOG(DBG,format,##__VA_ARGS__)
#define ELOG(format,...) LOG(ERR,format,##__VA_ARGS__)

#endif